/*
Copyright (C) 2016  Marien Raat

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include <SFML/Graphics.hpp>
#include <vector>

class CarExhaust : public sf::Drawable {
public:
    CarExhaust();
    void update(sf::Vector2f position, sf::Vector2f velocity,
                float angle, float boostUsed);
    void setTexture(sf::Texture *texture) { this->texture = texture; }
private:
    struct Particle {
        sf::Vector2f position;
        sf::Vector2f velocity;
        sf::Vector2f size;
        float rotation;
        float lifetime;
        float lifetimeLeft;
    };

    std::vector<Particle> particles;
    sf::VertexArray vertices;
    float boostParticlesNeeded;

    sf::Texture *texture;
    
    virtual void draw(sf::RenderTarget &target,
                      sf::RenderStates states) const;

    void addBoostParticles(sf::Vector2f position,
                           sf::Vector2f velocity, float angle,
                           float boostUsed);
    void updateParticles();

    sf::Color getBoostParticleColor(float ratio);
};
